from generadores import *
from hopfield import *
from rn_utils import *

def Energias(C):
	net = Hopfield(SIZE,C)
	espurios=[]
	memorias=[]
	for p in generarAleatorios(SIZE/2):
		e,s = net.Evaluar(p,False)
		if pertenece(s,C):
			memorias.append(e)
		else:
			espurios.append(e)
	return memorias, espurios

def aux(C,name):
	print "generando resultados",name
	m, e = Energias(C)
	
	#print m[0]
	
	for i in range(len(m)):
		f = open('resultados/ej5/'+name+'/memorias_'+str(i)+'.out','w')
		print >> f, ListToString(m[i])
		f.close()
	
	for i in range(len(e)):
		f = open('resultados/ej5/'+name+'/espurios_'+str(i)+'.out','w')
		print >> f, ListToString(e[i])
		f.close()

def ej5():
	ortogonales = generarOrtogonales(6)
	semi_ortogonales = generarSemiOrtogonal(6)
	#conjunto de 6 similares con 10% de diferencia
	similares = generarSimilares(generarAleatorios(1)[0],6,SIZE*10/100)
	
	aux(ortogonales,"ortogonales")
	aux(semi_ortogonales,"pseudo_ortogonales")
	aux(similares,"similares")
	
	#m, e = Energias(conjunto_ortogonales)
	'''
	for i in range(len(m)):
		f = open('resultados/ej5/ortogonales/memorias_'+i+'.out','w')
		print >> f, ArrayToBinary(m[i])
		f.close()
	
	for i in range(len(m)):
		f = open('resultados/ej5/ortogonales/memorias_'+i+'.out','w')
		print >> f, ArrayToBinary(m[i])
		f.close()
	
	PrintLista(m)
	PrintLista(e)
	m, e = Energias(conjunto_semi_ortogonales) 
	PrintLista(m)
	PrintLista(e)
	m, e = Energias(conjunto_similares) 
	PrintLista(m)
	PrintLista(e)
	'''
